var system = "/api-system"; //系统管理
var etfmanage = "/api-etfmanage";//ETF管理
var finance = "/api-finance";//财务管理
var valuation = "/api-valuation"; //估值模块
var schedule = "/api-schedule"; // 定时任务
var activiti = "/api-activiti"; // 工作流
var kettle = "/api-kettle"; // kettle管理
var dataway = "/api-dataway"; // 数据管理
var regression = "/api-regression"; // 回归测试管理
var reportworld = "/api-reportworld"; // 报表世界表结构管理
var successcode = "200";   //后台返回成功的码值

var pageSize = 20;   //每页显示多少条
var pageList = [20, 50, 100, 200, 500];  // 分页显示

//格式化数字
function getNumber(value) {
    if (isNull(value)) {
        return '';
    } else {
        return (parseFloat(value).toFixed(2) + '').replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,');
    }
}

function getNumber(value, scale) {
    if (isNull(value)) {
        return '';
    } else {
        if (isNull(scale)) {
            scale = 2;
        }
        return (parseFloat(value).toFixed(scale) + '').replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,');
    }
}

$(function () {
    var _ajax = $.ajax;
    $.ajax = function (opt) {
        opt = $.extend({
            type: 'POST',
            cache: false,
            //其它默认值
        }, opt);
        opt.type = 'POST';
        opt.error = function (jqXHR, textStatus, errorThrown) {
            //统一错误处理
            switch (jqXHR.status) {
                case(500):
                    window.location.href = system + "/userlogin/500";
                    break;
                case(401):
                    alert("未登录");
                    break;
                case(403):
                    alert("无权限执行此操作");
                    break;
                case(408):
                    alert("请求超时");
                    break;
                default:
                    window.location.href = system + "/userlogin/404";
            }

        }
        _ajax(opt);
    };
});

//重写控件默认的配置
$.extend($.fn.datagrid.defaults, {
    emptyMsg: '没有相关记录！',
    onLoadSuccess: function (data) {
        // showEmpty($(this));
    }, onLoadError: function (data) {
        errorHandle(data);
    }
});

//没有数据时候显示
function showEmpty(target) {
    var opts = $(target).datagrid('options');
    var vc = $(target).datagrid('getPanel').children('div.datagrid-view');
    var gridBody = vc.find(".datagrid-body").last();
    if (!$(target).datagrid('getRows').length) { //判断是否有数据
        //$.messager.show({title: '系统提示', msg: opts.emptyMsg});
        gridBody.empty(); //清空默认展示
        var bodyHeight = 20; //设定高度
        gridBody.height(bodyHeight);
        var d = $('<div class="datagrid-empty"></div>').html(opts.emptyMsg || 'no records').appendTo(gridBody);
        d.css({
            height: bodyHeight,
            'line-height': bodyHeight + 'px',
            width: '100%',
            color: 'red',
            textAlign: 'center'
        });
        //设定datagrid-view的高度
        vc.height(bodyHeight + gridBody.prevAll(".datagrid-header").outerHeight());
        //隐藏分页导航条，这个需要熟悉datagrid的html结构，直接用jquery操作DOM对象，easyui datagrid没有提供相关方法隐藏导航条
        $(target).closest('div.datagrid-wrap').find('div.datagrid-pager').hide();
    } else {
        $(target).closest('div.datagrid-wrap').find('div.datagrid-pager').show();
    }
}

//异常处理，跳转页面
function errorHandle(data) {
    if (!data) {
        window.location.href = system + "/userlogin/404";
        return;
    }
    if (401 == data.code) {
        window.location.href = system + "/userlogin/401";
        return;
    }
    if (400 == data.code) {
        window.location.href = system + "/userlogin/404";
        return;
    }
    if (401 == data.code) {
        window.location.href = system + "/userlogin/404";
        return;
    }
    if (500 == data.code) {
        window.location.href = system + "/userlogin/500";
        return;
    }
    if (data.message) {
        $.messager.alert('系统提示', data.message, 'error');
        return;
    }
    if (0 == data.code && data.message) { //业务异常信息
        $.messager.alert('系统提示', data.message, 'error');
        return;
    }
}


/**
 * 判断是否为空
 *  "", "  ", {},{ },[], [ ],null,undefined
 */
function isNull(arg) {
    if (typeof arg === 'undefined') {
        return true;
    }
    if (arg === null) {
        return true;
    }
    if (arg === {}) {
        return true;
    }
    if (typeof arg === 'string') {
        arg = arg.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
        if (arg === '') {
            return true;
        }
    }
    if (arg instanceof Array && arg.length === 0) {
        return true;
    }
    if (arg instanceof Object) {
        for (var p in arg) {
            if (p) {
                return false;
            }
        }
        return true;
    }
    return false;

}

//data-options="required:true,validType:'length[1,3]'" ;//输入字符长度1-3位

//boolen b=$('#txt_Name').validatebox("isValid");//验证结果
//easyUI表单验证
$.extend($.fn.validatebox.defaults.rules, {
    isjson: {// 验证json格式
        validator: function (value) {
            if (typeof value == 'string') {
                try {
                    var obj = JSON.parse(value);
                    if (typeof obj == 'object' && obj) {
                        return true;
                    } else {
                        return false;
                    }

                } catch (e) {
                    return false;
                }
            } else {
                return false;
            }
        },
        message: '请输入正确的JSON格式字符串！'
    },
    idcard: {// 验证身份证
        validator: function (value) {
            return /^\d{15}(\d{2}[A-Za-z0-9])?$/i.test(value);
        },
        message: '身份证号码格式不正确'
    },
    minLength: {
        validator: function (value, param) {
            return value.length >= param[0];
        },
        message: '请输入至少（2）个字符.'
    },
    length: {
        validator: function (value, param) {
            var len = $.trim(value).length;
            return len >= param[0] && len <= param[1];
        },
        message: "输入内容长度必须介于{0}和{1}之间."
    },
    phone: {// 验证电话号码
        validator: function (value) {
            return /^((\d2,3)|(\d{3}\-))?(0\d2,3|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(value);
        },
        message: '格式不正确,请使用下面格式:010-88888888'
    },
    mobile: {// 验证手机号码
        validator: function (value) {
            return /^(13|15|18)\d{9}$/i.test(value);
        },
        message: '手机号码格式不正确'
    },
    intOrFloat: {// 验证整数或小数
        validator: function (value) {
            return /^\d+(\.\d+)?$/i.test(value);
        },
        message: '请输入数字，并确保格式正确'
    },
    currency: {// 验证货币
        validator: function (value) {
            return /^\d+(\.\d+)?$/i.test(value);
        },
        message: '货币格式不正确'
    },
    qq: {// 验证QQ,从10000开始
        validator: function (value) {
            return /^[1-9]\d{4,9}$/i.test(value);
        },
        message: 'QQ号码格式不正确'
    },
    integer: {// 验证整数 可正负数
        validator: function (value) {
            return /^[+]?[1-9]+\d*$/i.test(value);

            // return /^([+]?[0-9])|([-]?[0-9])+\d*$/i.test(value);
        },
        message: '请输入整数'
    },
    integerZero: {// 验证整数 可正负数
        validator: function (value) {
            return /^[+]?[0-9]+\d*$/i.test(value);
        },
        message: '请输入整数'
    },

    age: {// 验证年龄
        validator: function (value) {
            return /^(?:[1-9][0-9]?|1[01][0-9]|120)$/i.test(value);
        },
        message: '年龄必须是0到120之间的整数'
    },
    chinese: {// 验证中文
        validator: function (value) {
            return /^[\Α-\￥]+$/i.test(value);
        },
        message: '请输入中文'
    },
    english: {// 验证英语
        validator: function (value) {
            return /^[A-Za-z]+$/i.test(value);
        },
        message: '请输入英文'
    },
    unnormal: {// 验证是否包含空格和非法字符
        validator: function (value) {
            return /.+/i.test(value);
        },
        message: '输入值不能为空和包含其他非法字符'
    },
    username: {// 验证用户名
        validator: function (value) {
            return /^[a-zA-Z][a-zA-Z0-9_]{5,15}$/i.test(value);
        },
        message: '用户名不合法（字母开头，允许6-16字节，允许字母数字下划线）'
    },
    faxno: {// 验证传真
        validator: function (value) {
            //            return /^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/i.test(value);
            return /^((\d2,3)|(\d{3}\-))?(0\d2,3|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(value);
        },
        message: '传真号码不正确'
    },
    zip: {// 验证邮政编码
        validator: function (value) {
            return /^[1-9]\d{5}$/i.test(value);
        },
        message: '邮政编码格式不正确'
    },
    ip: {// 验证IP地址
        validator: function (value) {
            return /d+.d+.d+.d+/i.test(value);
        },
        message: 'IP地址格式不正确'
    },
    name: {// 验证姓名，可以是中文或英文
        validator: function (value) {
            return /^[\Α-\￥]+$/i.test(value) | /^\w+[\w\s]+\w+$/i.test(value);
        },
        message: '请输入姓名'
    },
    date: {// 验证姓名，可以是中文或英文
        validator: function (value) {
            //格式yyyy-MM-dd或yyyy-M-d
            return /^(?:(?!0000)[0-9]{4}([-]?)(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|(?:0?[13578]|1[02])\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-]?)0?2\2(?:29))$/i.test(value);
        },
        message: '请输入合适的日期格式'
    },
    msn: {
        validator: function (value) {
            return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(value);
        },
        message: '请输入有效的msn账号(例：abc@hotnail(msn/live).com)'
    },
    isBlank: {
        validator: function (value, param) {
            return $.trim(value) != ''
        },
        message: '不能为空，全空格也不行'
    },
    comboxRequired: {  //检查下拉框的选择的是不是空
        validator: function (value, param) {
            if (value == param[0]) {
                return false;
            }
            return true;
        },
        message: '{1}' //{0就是第0个参数，1则为第一个参数}
    },
    comboxValidate: { //检查下拉框的选择的值是不是空
        validator: function (value, param) {
            var text = $('#' + param[0]).combobox('getText').split(",");
            var comm = false;
            for (var t in text) {
                comm = false;
                var data = $('#' + param[0]).combobox('getData');
                var vf = $('#' + param[0]).combobox('options').textField;
                for (var i in data) {
                    if (eval('data[i].' + vf) == text[t]) {
                        comm = true;
                    }
                }
                //有一个没有取到
                if (comm == false) {
                    break;
                }
            }
            return comm;
        },
        message: '{1}'
    },
    comtreeValidate: { //检查下拉框的选择的值是不是空
        validator: function (value, param) {
            var comm = false;
            if (isNull($('#' + param[0]).combobox('getText'))) {
                return comm;
            }
            var text = $('#' + param[0]).combobox('getText').split(",");
            for (var t in text) {
                if (isNull(text[t])) {
                    continue;
                }
                comm = false;
                var tree = $('#' + param[0]).combotree('tree');
                // 获取根节点
                var root = tree.tree('getRoot');
                //通过根节点获取根节点下的子节点
                var children = tree.tree('getChildren', root);
                for (var i in children) {
                    if (children[i].text == text[t]) {
                        comm = true;
                    }
                }
                //有一个没有取到
                if (comm == false) {
                    break;
                }
            }
            return comm;
        },
        message: '{1}'
    }
});
// combobox按下标选中
$.extend($.fn.combobox.methods, {
    selectedIndex: function (jq, index) {
        if (!index)
            index = 0;
        var data = $(jq).combobox('getData');
        if (data) {
            var vf = $(jq).combobox('options').valueField;
            $(jq).combobox('setValue', eval('data[index].' + vf));
        }
    }
});

//密码验证
$.extend($.fn.validatebox.defaults.rules, {
    oldPassword: {
        validator: function (value) {
            return /^.{6,20}$/.test(value);
        },
        message: '原密码输入不正确！'
    },
    affirmPassword: {
        validator: function (value, param) {
            if ($("#" + param[0]).val() != "" && value != "") {
                return $("#" + param[0]).val() == value;
            } else {
                return true;
            }
        },
        message: '两次密码输入的不一致，请重新输入！'
    },
    passequals: {
        validator: function (value, param) {
            if ($("#" + param[0]).val() != "" && value != "") {
                if (value == $("#" + param[0]).val()) {
                    return false;
                }
            }
            return true;
        },
        message: '新密码不能和旧密码相同！'
    },
    passindexof: {
        validator: function (value, param) {
            if ($("#" + param[0]).val() != "" && value != "") {
                if (value.indexOf($("#" + param[0]).val()) > -1) {
                    return false;
                }
            }
            return true;
        },
        message: "新密码不能包含登录名，请重新输入!"
    },
    pwdrules: {
        validator: function (value) {
            var pPattern = /^.*(?=.{6,20})(?=.*[A-Z])(?=.*[!#$%&'()*+-./:;<=>?@\\\[\]^_`{}~|\\]).*$/;
            if (!pPattern.test(value)) {
                return false;
            }
            return true;
        },
        message: "新密码必须6-20位，包括至少1个大写字母，1个特殊字符，请重新输入!"
    },
    isSame: {
        validator: function (value) {
            if (isSame(value)) {
                return false;
            }
            return true;
        },
        message: "新密码不能有连续6位相同的数字或者字母！，请重新输入!"
    },
    isSerial: {
        validator: function (value) {
            if (isSerial(value) || value.indexOf("567890") > -1
                || value.indexOf("098765") > -1) {
                return false;
            }
            return true;
        },
        message: "新密码不能有连续6位递增或者递减的数字和字母！，请重新输入!"
    }

});


//判断六个相连字符是否相同
function isSame(newPassword) {
    //popo111111   abcdef12345
    for (var i = 0; i < newPassword.length - 5; i++) {
        var isTwoSame = true;
        for (var j = 0; j < 5; j++) {
            if (newPassword.charAt(i + j + 1) != newPassword.charAt(i + j)) {
                isTwoSame = false;
                break;
            }
        }
        if (isTwoSame)
            return true;
    }
    return false;
}

//判断六个相连字符是否连续递增或者递减的数字和字母
function isSerial(newPassword) {
    for (var i = 0; i < newPassword.length - 5; i++) {
        for (var j = 0; j < 5; j++) {
            var isTwoSerial = true;
            if (newPassword.charCodeAt(i + j + 1) - newPassword.charCodeAt(i + j) != 1
                && newPassword.charCodeAt(i + j) - newPassword.charCodeAt(i + j + 1) != 1) {
                isTwoSerial = false;
                break;
            }
        }
        if (isTwoSerial)
            return true;
    }
    return false;
}

/**
 * 删除数组中的元素返回新的数组
 * @param arry 数组
 * @param index 要删除元素数组 例如[1,2]
 * @returns {Array}
 */
function getNewArr(arry, index) {
    if (isNull(arry) || arry.length == 0 || isNull(index) || index.length == 0) {
        return arry;
    }
    var arryNew = [];
    falg:for (var i = 0; i < arry.length; i++) {
        for (var k = 0; k < index.length; k++) {
            if (i == index[k]) {
                continue falg;
            }
        }
        arryNew.push(arry[i]);
    }
    return arryNew;
}


//图表语言设置
function setChartLang() {
    Highcharts.setOptions({
        lang: {
            contextButtonTitle: "图表导出菜单",
            decimalPoint: ".",
            downloadJPEG: "下载JPEG图片",
            downloadPDF: "下载PDF文件",
            downloadPNG: "下载PNG文件",
            downloadSVG: "下载SVG文件",
            drillUpText: "返回 {series.name}",
            loading: "加载中",
            months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
            noData: "没有数据",
            numericSymbols: ["千", "兆", "G", "T", "P", "E"],
            printChart: "打印图表",
            resetZoom: "恢复缩放",
            resetZoomTitle: "恢复图表",
            shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
            thousandsSep: ",",
            weekdays: ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"]
        }
    });
}


var InterValObj; //timer变量，控制时间
var count = 120; //间隔函数，1秒执行 ,(有效时间:5分钟)
var curCount;//当前剩余秒数
var codeLength = 6;//验证码长度
//发送手机短信验证码
function sendCode() {
    var mobile = $("input[name='mobile']").val();
    //发送验证码到手机
    if (/^(13|15|18)\d{9}$/i.test(mobile)) {
        curCount = count;
        // 设置button效果，开始计时
        $("#btnSendCode").attr("disabled", "true");
        $("#btnSendCode").val("请在" + curCount + "秒内输入验证码");
        InterValObj = window.setInterval(SetRemainTime, 1000); // 启动计时器，1秒执行一次
        $.ajax({
            url: "/sendMassage/sendMassage",
            method: 'post',
            data: {
                "mobile": mobile
            },
            success: function (data) {
                if (successcode != data.code) {
                    return errorHandle(data)
                }
                $.messager.alert('系统提示', data.data, 'info');
                $.messager.alert({title: '系统提示', msg: data.successMessage});
            },
            error: function (rel) {
                $.messager.alert('错误', '与服务器通讯失败，请检查通讯状态！', 'error');
            }
        });
    } else {
        $.messager.alert('错误', '请输入正确的手机号码！', 'error');
    }
}

//timer处理函数
function SetRemainTime() {
    if (curCount == 0) {
        window.clearInterval(InterValObj);// 停止计时器
        $("#btnSendCode").removeAttr("disabled");// 启用按钮
        $("#btnSendCode").val("重新发送验证码");
        code = ""; // 清除验证码。如果不清除，过时间后，输入收到的验证码依然有效
    } else {
        curCount--;
        $("#btnSendCode").val("请在" + curCount + "秒内输入验证码");
    }
}

/**
 *  combobox可编辑 combotree可编辑 的模糊查询
 */
(function ($) {
    //combobox可编辑，自定义模糊查询
    $.fn.combobox.defaults.editable = true;
    $.fn.combobox.defaults.filter = function (q, row) {
        var opts = $(this).combobox('options');
        return row[opts.textField].indexOf(q) >= 0;
    };
    //combotree可编辑，自定义模糊查询
    $.fn.combotree.defaults.editable = true;
    $.extend($.fn.combotree.defaults.keyHandler, {
        query: function (q) {
            var t = $(this).combotree('tree');
            t.tree("search", q);
        }
    });
    $.extend($.fn.tree.methods, {
        /**
         * 扩展easyui tree的搜索方法
         * @param tree easyui tree的根DOM节点(UL节点)的jQuery对象 * @param searchText 检索的文本
         * @param this-context easyui tree的tree对象 */
        search: function (jqTree, searchText) {
            //easyui tree的tree对象。可以通过tree.methodName(jqTree)方式调用easyui tree的方法
            var tree = this;
            //获取所有的树节点
            var nodeList = getAllNodes(jqTree, tree);
            //如果没有搜索条件，则展示所有树节点
            searchText = $.trim(searchText);
            if (searchText == "") {
                for (var i = 0; i < nodeList.length; i++) {
                    $(".tree-node-targeted",
                        nodeList[i].target).removeClass("tree-node-targeted");
                    $(nodeList[i].target).show();
                }
                //展开已选择的节点（如果之前选择了）
                var selectedNode = tree.getSelected(jqTree);
                if (selectedNode) {
                    tree.expandTo(jqTree, selectedNode.target);
                }
                return;
            }
            //搜索匹配的节点并高亮显示
            var matchedNodeList = [];
            if (nodeList && nodeList.length > 0) {
                var node = null;
                for (var i = 0; i < nodeList.length; i++) {
                    node = nodeList[i];
                    if (isMatch(searchText, node.text)) {
                        matchedNodeList.push(node);
                    }
                }
                //隐藏所有节点
                for (var i = 0; i < nodeList.length; i++) {
                    $(".tree-node-targeted", nodeList[i].target).removeClass("tree-node-targeted");
                    $(nodeList[i].target).hide();
                }
                //折叠所有节点
                tree.collapseAll(jqTree);
                //展示所有匹配的节点以及父节点
                for (var i = 0; i < matchedNodeList.length; i++) {
                    showMatchedNode(jqTree, tree, matchedNodeList[i]);
                    tree.showChildren(jqTree, matchedNodeList[i]);
                }
            }
        },
        /**
         * 展示节点的子节点（子节点有可能在搜索的过程中被隐藏了）
         * @param node easyui tree节点
         */
        showChildren: function (jqTree, node) {
            //easyui tree的tree对象。可以通过tree.methodName(jqTree)方式调用easyui tree的方法
            var tree = this;
            //展示子节点
            if (!tree.isLeaf(jqTree, node.target)) {
                var children = tree.getChildren(jqTree, node.target);
                if (children && children.length > 0) {
                    for (var i = 0; i < children.length; i++) {
                        if ($(children[i].target).is(":hidden")) {
                            $(children[i].target).show();
                        }
                    }
                }
            }
        },
        /**
         * 将滚动条滚动到指定的节点位置，使该节点可见（如果有滚动条才滚动，没有滚动条就不滚动）
         * treeContainer: easyui tree的容器（即存在滚动条的树容器）。如果为null，则取easyui tree的根UL节点的父节点。
         * argetNode: 将要滚动到的easyui tree节点。如果targetNode为空，则默认滚动到当前已选中的节点，如果没有选中的节点，则不滚动 * } */
        scrollTo: function (jqTree, param) {
            //easyui tree的tree对象。可以通过tree.methodName(jqTree)方式调用easyui tree的方法
            var tree = this;
            //如果node为空，则获取当前选中的node
            var targetNode = param && param.targetNode ? param.targetNode : tree.getSelected(jqTree);
            if (targetNode != null) {
                //判断节点是否在可视区域 var root = tree.getRoot(jqTree);
                var $targetNode = $(targetNode.target);
                var Container = param && param.treeContainer ? param.treeContainer : jqTree.parent();
                var containerH = container.height();
                var nodeOffsetHeight = $targetNode.offset().top - container.offset().top;
                if (nodeOffsetHeight > (containerH - 30)) {
                    var scrollHeight = container.scrollTop() + nodeOffsetHeight - containerH + 30;
                    container.scrollTop(scrollHeight);
                }
            }
        }
    });

    /**
     * 展示搜索匹配的节点 */
    function showMatchedNode(jqTree, tree, node) {
        //展示所有父节点
        $(node.target).show();
        $(".tree-title", node.target).addClass("tree-node-targeted");
        var pNode = node;
        while ((pNode = tree.getParent(jqTree, pNode.target))) {
            $(pNode.target).show();
        }
        //展开到该节点
        tree.expandTo(jqTree, node.target);
        //如果是非叶子节点，需折叠该节点的所有子节点
        if (!tree.isLeaf(jqTree, node.target)) {
            tree.collapse(jqTree, node.target);
        }
    }

    /**
     * 判断searchText是否与targetText匹配
     * @param searchText 检索的文本 * @param targetText 目标文本
     * @return true-检索的文本与目标文本匹配；否则为false.
     */
    function isMatch(searchText, targetText) {
        return $.trim(targetText) != "" && targetText.indexOf(searchText) != -1;
    }

    /**
     * 获取easyui tree的所有node节点 */
    function getAllNodes(jqTree, tree) {
        var allNodeList = jqTree.data("allNodeList");
        if (!allNodeList) {
            var roots = tree.getRoots(jqTree);
            allNodeList = getChildNodeList(jqTree, tree, roots);
            jqTree.data("allNodeList", allNodeList);
        }
        return allNodeList;
    }

    /**
     * 定义获取easyui tree的子节点的递归算法 */
    function getChildNodeList(jqTree, tree, nodes) {
        var childNodeList = [];
        if (nodes && nodes.length > 0) {
            var node = null;
            for (var i = 0; i < nodes.length; i++) {
                node = nodes[i];
                childNodeList.push(node);
                if (!tree.isLeaf(jqTree, node.target)) {
                    var children = tree.getChildren(jqTree, node.target);
                    childNodeList = childNodeList.concat(getChildNodeList(jqTree, tree, children));
                }
            }
        }
        return childNodeList;
    }
})(jQuery);

/**
 * 重写的复选框，带多选
 */
(function ($) {
    $.fn.extend({
        checkboxExt: function (options) {
            //默认参数
            var defaluts = {
                labelField: 'name',//绑定显示文本的字段Key（data对象中必须存在此Key）
                valueField: 'id',  //绑定值的字段Key（data对象中必须存在此Key）
                checkedValue: [],  //选中值的集合
                data: [], /*初始化数据，
                                               说明：在数据中可以增加自定义属性，自定义属性的key为attrName，属性的value为attrVal（此情况是针对设置单个属性的）
                                                   针对设置多个属性的情况，直接增加属性attrs即可，格式如attrs:[{name:'attr1',val:'1'},{name:'attr2',val:'2'}]
                                       */
                labelPosition: 'after',
                labelWidth: '150px', //复选框后面文件宽度
                onChangeExt: null, /*onChange扩展事件，返回选中对象和options
                                               其中选中对象格式如：{ curChked: 当前复选框是否被选中, curVal: 当前复选框的值, curObj: 当前复选框对象, vals: 所有勾选中复选框的值集合, objs: 所有复选框对象属性 }
                                                   其中的objs格式如：{name: 复选框显示的文本, checked: 复选框是否被选中, value: 复选框的值, obj: 复选框对象}
                                       */
                onLoadSuccess: null, /*加载成功事件，返回选中对象和options
                                               其中的选中对象格式如{ vals: 所有勾选中复选框的值集合, objs: 所有复选框对象属性 }
                                                   其中的objs格式如：{name: 复选框显示的文本, checked: 复选框是否被选中, value: 复选框的值, obj: 复选框对象}
                                       */
                size: 3,        // 每行显示条数
                showAll: true  //时候显示全选按钮
            };
            var opts = $.extend({}, defaluts, options);
            this.each(function (index, ele) {
                if (opts.data && opts.data.length > 0) {
                    var allChkHtml = '';

                    //检查当前复选框是否为勾选中状态
                    var getIsChked = function (curVal) {
                        var isChked = false;

                        if (opts.checkedValue && opts.checkedValue.length > 0) {
                            for (var i = 0; i < opts.checkedValue.length; i++) {
                                if (opts.checkedValue[i] == curVal) {
                                    isChked = true;
                                    break;
                                }
                            }
                        }

                        return isChked;
                    };

                    var allChkHtmlAll = "";
                    if (opts.showAll) {
                        var chkOptsAll = 'data-options="title:\'全选'
                            + '\',labelPosition:\'' + opts.labelPosition
                            + '\',labelWidth:\'' + opts.labelWidth
                            + '\',checked:' + 'false' + '"';
                        allChkHtmlAll = '<tr><td><input class="easyui-checkbox checkbox-ext" name="checkboxName" ' + chkOptsAll + 'value="all"></td></tr>';
                    }

                    allChkHtml += '<table cellpadding="2px" cellspacing="0" class="form-table">' + allChkHtmlAll + '<tr>';
                    for (var i = 0; i < opts.data.length; i++) {
                        //获取自定义属性
                        var chkCusAttr = opts.data[i].attrName != undefined && opts.data[i].attrName.length > 0 && opts.data[i].attrVal != undefined && opts.data[i].attrVal.length > 0 ? ' ' + opts.data[i].attrName + '="' + opts.data[i].attrVal + '" ' : '';
                        //获取多个自定义属性的情况
                        if (opts.data[i].attrs && opts.data[i].attrs.length > 0) {
                            for (var j = 0; j < opts.data[i].attrs.length; j++) {
                                if (opts.data[i].attrs[j].name != undefined && opts.data[i].attrs[j].name.length > 0 && opts.data[i].attrs[j].val != undefined && opts.data[i].attrs[j].val.length > 0) {
                                    chkCusAttr += ' ' + opts.data[i].attrs[j].name + '="' + opts.data[i].attrs[j].val + '" ';
                                }
                            }
                        }

                        //获取是否勾选中
                        var chkOptsChecked = getIsChked(opts.data[i][opts.valueField]) ? 'true' : 'false';
                        //设置onChange事件
                        var chkOptsChg = opts.onChangeExt && opts.onChangeExt.length > 0 ? ',onChange:' + opts.onChangeExt : '';
                        //设置data-options属性
                        var chkOpts = 'data-options="title:\'' + opts.data[i][opts.labelField]
                            + '\',labelPosition:\'' + opts.labelPosition
                            + '\',labelWidth:\'' + opts.labelWidth
                            + '\',value:\'' + opts.data[i][opts.valueField]
                            + '\',checked:' + chkOptsChecked
                            + chkOptsChg + '"';
                        if (i > 0 && i % opts.size == 0) {
                            allChkHtml += '</tr><tr>';
                        }
                        allChkHtml += '<td><input class="easyui-checkbox checkbox-ext" name="checkboxName" ' + chkOpts + '' + chkCusAttr + '></td>';
                    }
                    allChkHtml += '</tr></table>';
                    $(this).html(allChkHtml);
                    var chkObjs = $(this).find('.checkbox-ext');

                    //初始化checkbox
                    chkObjs.checkbox();

                    //获取勾选中的值集合和所有对象
                    var getChkObjs = function () {
                        var retValArr = [],
                            retObjArr = [];

                        chkObjs.each(function (index, thisChkObj) {
                            if ($(thisChkObj).next().find('.checkbox-checked').next().length > 0) {
                                retValArr.push($(thisChkObj).val());
                            }
                            retObjArr.push({
                                name: $(thisChkObj).checkbox('options').label,
                                checked: $(thisChkObj).next().find('.checkbox-checked').length > 0,
                                value: $(thisChkObj).val(),
                                obj: thisChkObj
                            });
                        });

                        return [retValArr, retObjArr];
                    };

                    chkObjs.checkbox({
                        onChange: function (thisIsChked) {
                            var curChkObjs = getChkObjs();
                            if ("all" == $(this).val()) {
                                chkAllObjs(thisIsChked);
                            }
                            opts.onChangeExt({
                                curChked: thisIsChked,
                                curVal: $(this).val(),
                                curObj: this,
                                vals: curChkObjs[0],
                                objs: curChkObjs[1]
                            }, opts);
                        }
                    });

                    var chkAllObjs = function (thisIsChked) {
                        chkObjs.each(function (index, thisChkObj) {
                            // $(thisChkObj).checkbox('checked', thisIsChked);
                            $(thisChkObj).checkbox({
                                checked: thisIsChked
                            });
                        });
                    };

                    if (opts.onLoadSuccess && typeof opts.onLoadSuccess == 'function') {
                        var curChkObjs = getChkObjs();
                        opts.onLoadSuccess({vals: curChkObjs[0], objs: curChkObjs[1]}, opts);
                    }
                }
            });
        }
    });
})(jQuery);

//绑定键盘事件 obj 搜索按钮id，objTree treeid
function treeSearch(textboxId, treeId) {
    //绑定键盘事件
    $("#" + textboxId).searchbox("textbox").keyup(function (e) {
        //这里必须用 getText，才能实时获取输入的值
        var newValue = $("#" + textboxId).searchbox("getText");
        $("#" + treeId).tree("search", newValue)
    });
}


//可编辑的下拉框获取值
function getCommboxValue(obj) {
    var value = $('#' + obj).combobox('getValues');
    if (isNull(value)) {
        return null;
    }
    var data = $('#' + obj).combobox('getData');
    var vf = $('#' + obj).combobox('options').valueField;
    var arrvalue = [];
    for (var j in value) {
        for (var i in data) {
            if (eval('data[i].' + vf) == value[j]) {
                arrvalue.push(value[j]);
            }
        }
    }
    return JSON.stringify(arrvalue);
}

/**
 * 获取可编辑下拉树的所有值
 * @param obj
 * @returns {*}
 */
function getCommbotreeAllValue(obj) {
    var tree = $('#' + obj).combotree('tree');
    // 获取根节点
    var root = tree.tree('getRoot');
    //通过根节点获取根节点下的子节点
    var children = tree.tree('getChildren', root);
    var arrvalue = [];
    for (var i in children) {
        arrvalue.push(children[i].id);
    }
    return JSON.stringify(arrvalue);

}

//可编辑的下拉框数获取值,删除值之后
function getCommbotreeValue(obj) {
    var value = $('#' + obj).combotree('getValues');
    var text = $('#' + obj).combotree('getText');
    if (isNull(value) || isNull(text)) {
        return null;
    }
    var tree = $('#' + obj).combotree('tree');
    // 获取根节点
    var root = tree.tree('getRoot');
    //通过根节点获取根节点下的子节点
    var children = tree.tree('getChildren', root);
    var textarr = text.split(",");
    var arrvalue = [];
    for (var j in textarr) {
        for (var i in children) {
            if (children[i].text == textarr[j]) {
                arrvalue.push(children[i].id);
            }
        }
    }
    return JSON.stringify(arrvalue);

}

/**
 * 获取明细数据
 * @param obj
 * @returns {*}
 */
function getCommbotreeValueDetail(obj) {
    var value = $('#' + obj).combotree('getValues');
    var text = $('#' + obj).combotree('getText');
    if (isNull(value) || isNull(text)) {
        return null;
    }
    var tree = $('#' + obj).combotree('tree');
    // 获取根节点
    var root = tree.tree('getRoot');
    //通过根节点获取根节点下的子节点
    var children = tree.tree('getChildren', root);
    var textarr = text.split(",");
    var arrvalue = [];
    for (var j in textarr) {
        for (var i in children) {
            if (children[i].text == textarr[j] && isNull(children[i].children)) {
                arrvalue.push(children[i].id);
            }
        }
    }
    return JSON.stringify(arrvalue);

}


/**
 * cookie中存值
 * */
function setCookie(name, value, exdays) {
    if (value) {
        var days = 1; //定义一天
        var exp = new Date();
        exp.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
        // 写入Cookie, toGMTString将时间转换成字符串
        var expires = "expires=" + exp.toGMTString();
        document.cookie = name + "=" + value + "; " + expires;
    }
};

/**
 * cookie中取值
 * */
function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i].trim();
        if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
    }
    return "";
};


/**
 * 清除指定cookie值
 * */
function delCookie(name) {
    setCookie(name, '1', -1);
};

/**
 /**
 * 更换EasyUI主题的方法
 * @param themeName
 * 主题名称
 */
$('#layout_north_pfMenu').menu({
    onClick: function (item) {
        var themeName = item.text;
        sessionStorage.setItem("themeName", themeName);
        var url = $('#easyuiTheme').attr('href');
        var href = url.substring(0, url.indexOf('themes')) + 'themes/' + themeName + '/easyui.css';
        $('#easyuiTheme').attr('href', href);
        var $iframe = $('iframe');
        if ($iframe.length > 0) {
            for (var i = 0; i < $iframe.length; i++) {
                var ifr = $iframe[i];
                $(ifr).contents().find('#easyuiTheme').attr('href', href);
            }
        }
        var background = "#95b8e7";
        if ("black" == themeName) {
            background = "#383838";
        }
        if ("bootstrap" == themeName) {
            background = "#95b8e7";
        }
        if ("gray" == themeName) {
            background = "#cccccc";
        }
        if ("metro" == themeName) {
            background = "#E6E6E6";
        }
        $(".wu-header").css("background", background);
        $.parser.parse('.wu-header');//重新渲染页面，解决样式不生效
    }
});

$(function () {
    var themeName = sessionStorage.getItem("themeName");
    if (isNull(themeName)) {
        themeName = 'default';
    }
    var url = $('#easyuiTheme').attr('href');
    var href = url.substring(0, url.indexOf('themes')) + 'themes/' + themeName + '/easyui.css';
    $('#easyuiTheme').attr('href', href);
    var $iframe = $('iframe');
    if ($iframe.length > 0) {
        for (var i = 0; i < $iframe.length; i++) {
            var ifr = $iframe[i];
            $(ifr).contents().find('#easyuiTheme').attr('href', href);
        }
    }
})

/**
 * 表格样式
 * @param status
 * @returns {string}
 */
function rowStyler(status) {
    //大于的时候，显示为黄色，100%的时候，显示为红色。
    if (status == 2) {
        return 'background-color:red;'; //已删除
    } else if (status == 3) {
        return 'background-color: aquamarine;'; // 待审核
    } else if (status == 4) {
        return 'background-color: darkcyan;'; //审核中
    } else if (status == 5) {
        return 'background-color: orange;'; //审核不通过
    }
}
